package psrc.bd.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import psrc.logic.util.beans.PedidoBean;
import psrc.logic.util.beans.PedidoClienteBean;
import psrc.logic.util.beans.Romaneio;
import psrc.logic.util.beans.StatusEnvio;
import psrc.logic.util.beans.StatusPagamento;

public class PedidoClienteDAO extends AbstractDAO {

	public PedidoClienteDAO(Connection conn) {
		super(conn);
	}

	@Override
	public <T> void adiciona(T _bean) throws SQLException {
		PedidoClienteBean bean = (PedidoClienteBean) _bean;
		String sql = "insert into Pedido_Cliente "
				+ "(fk_pedido, fk_cliente) values (?, ?)";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setString(1, bean.getFkPedido());
			stmt.setString(2, bean.getFkCliente());

			stmt.execute();
			stmt.close();

		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}

	@Override
	public <T> void remove(T _bean) throws SQLException {
		PedidoClienteBean bean = (PedidoClienteBean) _bean;
		try {
			PreparedStatement stmt = connection
					.prepareStatement("delete from Pedido_Cliente where id_pedido_cliente=?");

			stmt.setInt(1, Integer.parseInt(bean.getIdPedidoCliente()));

			stmt.execute();
			stmt.close();

		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}

	@Override
	public <T> void edita(T _bean) throws SQLException {
		PedidoClienteBean bean = (PedidoClienteBean) _bean;

		String sql = "update Pedido_Cliente set "
				+ "fk_pedido=?, fk_cliente=? where id_pedido_cliente=?";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setString(1, bean.getFkPedido());
			stmt.setString(2, bean.getFkCliente());
			stmt.setInt(3, Integer.parseInt(bean.getIdPedidoCliente()));
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}

	@Override
	public <T> List<T> seleciona() throws SQLException {
		List<PedidoClienteBean> pedido_clientes = new ArrayList<PedidoClienteBean>();

		try {
			PreparedStatement stmt = connection
					.prepareStatement("select * from Pedido_Cliente");

			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				PedidoClienteBean bean = new PedidoClienteBean();
				bean.setFkPedido(rs.getString("fk_pedido"));
				bean.setFkCliente(rs.getString("fk_cliente"));
				bean.setIdPedidoCliente(rs.getString("id_pedido_cliente"));

				pedido_clientes.add(bean);
			}
			rs.close();
			stmt.close();
			return (List<T>) pedido_clientes;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}
	
	@Override
	public <T> List<T> selecionaPorId(T param) throws SQLException {
		List<PedidoClienteBean> pedido_clientes = new ArrayList<PedidoClienteBean>();
		PedidoClienteBean user = (PedidoClienteBean) param;
		try {
			PreparedStatement stmt = connection
					.prepareStatement("select * from Pedido_Cliente where id_pedido_cliente=?");
			stmt.setString(1, user.getIdPedidoCliente());
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()) {
				PedidoClienteBean bean = new PedidoClienteBean();
				bean.setFkPedido(rs.getString("fk_pedido"));
				bean.setFkCliente(rs.getString("fk_cliente"));
				bean.setIdPedidoCliente(rs.getString("id_pedido_cliente"));

				pedido_clientes.add(bean);
			}
			rs.close();
			stmt.close();
			return (List<T>) pedido_clientes;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}
}
